`include "../codigo/Writeback.v"

module test_Writeback ( );
	reg	t_clock;
	// Memory
	reg	[4:0]	t_mem_wb_regdest;
	reg	t_mem_wb_writereg;
	reg	[31:0]	t_mem_wb_wbvalue;
	// Registers
	wire	wb_reg_en;
	wire	[4:0]	wb_reg_addr;
	wire	[31:0] wb_reg_data;
	// Forwarding
	wire	[31:0] wb_fw_wbvalue;
	wire	wb_fw_writereg;


	
	Writeback t_writeback (.clock(t_clock),
		.mem_wb_regdest(t_mem_wb_regdest),
		.mem_wb_writereg(t_mem_wb_writereg),
		.mem_wb_wbvalue(t_mem_wb_wbvalue),
		.wb_reg_en(t_wb_reg_en),
        	.wb_reg_addr(t_wb_reg_addr),
		.wb_reg_data(t_wb_reg_data),
		.wb_fw_wbvalue(t_wb_fw_wbvalue),
		.wb_fw_writereg(t_wb_fw_writereg) );

	initial begin

	//Teste de Escrita
	 //sub-teste 1 > sinal de controle
	$display("Teste 1: sinal de controle");
	$display("\nNeste teste, o sinal de escrita do controle não estará ativo");
	$display("\nO resultado esperado é que não exista acesso à saída de dados da estrutura"); 
	t_mem_wb_regdest = #0 5'b10010;
	t_mem_wb_writereg = #0 1'b0;
	t_mem_wb_wbvalue = #0 32'b101010011;
	t_clock = #2 1'b1;
	t_clock = #2 1'b0;	
	$display("\nDados Iniciais:\n mem_wb_value : %d\n mem_wb_writereg : %d\n", t_writeback.mem_wb_wbvalue, t_writeback.mem_wb_writereg);
	$display("\nDados Finais:\nwb_reg_data: %d\nwb_fw_wbvalue: %d\n", t_wb_reg_data, t_wb_fw_wbvalue);

	$display("Teste com o sinal ativo");
	t_mem_wb_writereg = #2 1'b1;
	t_clock = #2 1'b1
	t_clock = #2 1'b0;
	$display("\nDados Iniciais:\n mem_wb_value : %d\n mem_wb_writereg : %d\n", t_writeback.mem_wb_wbvalue, t_writeback.mem_wb_writereg);
	$display("\nDados Finais:\nwb_reg_data: %d\nwb_fw_wbvalue: %d\n", t_wb_reg_data, t_wb_fw_wbvalue);


	end
	

endmodule

